package model

// Wallet 钱包结构体
type Wallet struct {
	Id            uint  `gorm:"column:id" json:"id" form:"id"`                                     // 主键ID
	Uid           uint  `gorm:"column:uid;index:idx_uid_balace" json:"uid" form:"uid"`             // 用户ID
	Type          uint  `gorm:"column:type;index:idx_uid_balace" json:"type" form:"type"`          // 钱包类型 0-默认钱包
	Balace        int64 `gorm:"column:balace" json:"balace" form:"balace"`                         // 余额 单位：分
	UpdatedAt     int64 `gorm:"column:updated_at" json:"updated_at" form:"updated_at"`             // 更新时间 Unix时间戳
	UpdatedAmount int64 `gorm:"column:updated_amount" json:"updated_amount" form:"updated_amount"` // 最后一次更新的金额 单位：分

	// 仅供前端显示的字段
	User User `gorm:"-" json:"user" form:"user"` // 用户信息
}

func (Wallet) TableName() string {
	return "wallet"
}

// WalletLog 钱包日志结构体
// 转账时，流水需要记录两笔，避免查询时的where or的复杂度过高
type WalletLog struct {
	Id         uint   `gorm:"column:id" json:"id" form:"id"`                               // 主键ID
	WalletId   uint   `gorm:"column:wallet_id" json:"wallet_id" form:"wallet_id"`          // 钱包ID 转账(支出：支出方钱包ID 收入：收款方钱包ID)
	Type       uint   `gorm:"column:type" json:"type" form:"type"`                         // 日志类型 1-充值 2-消费 3-退款 4-提现 5-转账(支出) 6-转账(收入)
	WalletToId uint   `gorm:"column:wallet_to_id" json:"wallet_to_id" form:"wallet_to_id"` // 支出：收款方钱包ID 收入：支出方钱包ID
	Amount     int64  `gorm:"column:amount" json:"amount" form:"amount"`                   // 金额 单位：分
	OrderNo    string `gorm:"column:order_no" json:"order_no" form:"order_no"`             // 流水订单号
	Note       string `gorm:"column:note" json:"note" form:"note"`                         // 备注
	Ip         string `gorm:"column:ip" json:"ip" form:"ip"`                               // 操作时 IP地址
	Ua         string `gorm:"column:ua" json:"ua" form:"ua"`                               // 操作时 User-Agent
	CreatedAt  int64  `gorm:"column:created_at" json:"-" form:"-"`                         // 创建时间 Unix时间戳

	// 仅供前端显示字段
	ToWallet Wallet `gorm:"-" json:"to_wallet,omitempty" form:"to_wallet"` // 收款/付款方钱包信息
}

func (WalletLog) TableName() string {
	return "wallet_log"
}
